(shrink-window-if-larger-than-buffer): Add `interactive'.
authorRichard M. Stallman <rms@gnu.org>
Mon, 31 May 1993 04:56:19 +0000 (04:56 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 31 May 1993 04:56:19 +0000 (04:56 +0000)
Do nothing if window contents not entirely visible.

lisp/window.el

index d9ad3a2e1a644ad918d43687ae440be1b55e49aa..621e0706efa8b9060858b674670b29af9a296fbb 100644 (file)
@@ -111,9 +111,10 @@ ARG columns.  No arg means split equally."
   (shrink-window arg t))
 
 (defun shrink-window-if-larger-than-buffer (&optional window)
-  "Shrink the WINDOW to be as small as possible to display its contents.  Do
-nothing if only one window is displayed or if the buffer contains more lines
-than the present window height."
+  "Shrink the WINDOW to be as small as possible to display its contents.
+Do nothing if the buffer contains more lines than the present window height,
+or if some of the window's contents are scrolled out of view."
+  (interactive)
   (save-excursion
     (set-buffer (window-buffer window))
     (let ((w (selected-window)) ;save-window-excursion can't win
@@ -124,22 +125,23 @@ than the present window height."
          (buffer-read-only nil)
          (modified (buffer-modified-p))
          (buffer (current-buffer)))
-      (unwind-protect
-         (progn
-           (select-window (or window w))
-           (goto-char (point-min))
-           (while (pos-visible-in-window-p (point-max))
-             ;; defeat file locking... don't try this at home, kids!
-             (setq buffer-file-name nil)
-             (insert ?\n) (setq n (1+ n)))
-           (if (> n 0) (shrink-window (1- n))))
-       (delete-region (point-min) (point))
-       (set-buffer-modified-p modified)
-       (goto-char p)
-       (select-window w)
-       ;; Make sure we unbind buffer-read-only
-       ;; with the proper current buffer.
-       (set-buffer buffer)))))
+      (if (pos-visible-in-window-p (point-min))
+         (unwind-protect
+             (progn
+               (select-window (or window w))
+               (goto-char (point-min))
+               (while (pos-visible-in-window-p (point-max))
+                 ;; defeat file locking... don't try this at home, kids!
+                 (setq buffer-file-name nil)
+                 (insert ?\n) (setq n (1+ n)))
+               (if (> n 0) (shrink-window (1- n))))
+           (delete-region (point-min) (point))
+           (set-buffer-modified-p modified)
+           (goto-char p)
+           (select-window w)
+           ;; Make sure we unbind buffer-read-only
+           ;; with the proper current buffer.
+           (set-buffer buffer))))))
       
 (define-key ctl-x-map "2" 'split-window-vertically)
 (define-key ctl-x-map "3" 'split-window-horizontally)